package com.itany.corejava.code17_设计模式.动态代理;

import java.lang.reflect.Proxy;
import java.util.Arrays;

/**
 * @author MissChen
 * @version 1.0
 * @date 2023 年12月20日 9:38
 */
public class Test {
    public static void main(String[] args) {
        // Proxy.newProxyInstance方法创建代理对象，并通过代理对象调用方法，在方法前后，会执行处理器中的操作
        // 参数一:定义代理类的类加载器,即:目标类的类加载器
        // 参数二:代理类要实现的接口列表，即:目标类实现的接口列表
        // 参数三: 指派方法调用的调用处理程序，即：代理类的方法的具体实现(需要实现InvocationHandler)
        // System.out.println(Arrays.toString(UserServiceImpl.class.getInterfaces()));

       UserService userService=(UserService) Proxy.newProxyInstance(
                UserServiceImpl.class.getClassLoader(),
                UserServiceImpl.class.getInterfaces(),
                new LogInvocationHandler(new UserServiceImpl())
        );
       String res=userService.login("admin","123");
        System.out.println(res);


        SomeService someService=(SomeService) Proxy.newProxyInstance(
                SomeServiceImpl.class.getClassLoader(),
                SomeServiceImpl.class.getInterfaces(),
                new LogInvocationHandler(new SomeServiceImpl())
        );
        someService.doSome();
        someService.doOther();

    }
}
